home *** CD-ROM | disk | FTP | other *** search
- program CountFib;
-
- {$IFDEF Win32}
- {$APPTYPE CONSOLE}
- {$ENDIF}
-
- uses
- {$IFDEF Windows}
- WinCrt, WinTypes, WinProcs,
- {$ELSE}
- Windows,
- {$ENDIF}
- SysUtils;
-
- {$IFDEF Windows}
- type
- cardinal = longint;
- {$ENDIF}
-
- var
- FibCount : longint;
-
- function Fibonacci(N : cardinal) : cardinal;
- begin
- inc(FibCount);
- if N <= 1 then
- Result := 1
- else
- Result := Fibonacci(N-1) + Fibonacci(N-2);
- end;
-
- function FastFib(N : cardinal) : cardinal;
- var
- i : cardinal;
- FibN : cardinal;
- FibNminus1 : cardinal;
- FibNminus2 : cardinal;
- begin
- if (N <= 1) then
- Result := 1
- else begin
- FibNminus1 := 1;
- FibNminus2 := 1;
- for i := 2 to N do begin
- FibN := FibNminus1 + FibNminus2;
- FibNminus2 := FibNminus1;
- FibNminus1 := FibN;
- end;
- Result := FibN;
- end;
- end;
-
- var
- i : integer;
- Fib : longint;
- StartTime, EndTime : integer;
- begin
- writeln(' N FibonacciN CallCount');
- for i := 0 to 35 do begin
- FibCount := 0;
- StartTime := GetTickCount;
- Fib := Fibonacci(i);
- EndTime := GetTickCount;
- writeln(i:3, Fib:11, FibCount:11);
- end;
- writeln('Time for last calculation: ', EndTime-StartTime);
- writeln(' N FibonacciN');
- for i := 0 to 35 do begin
- StartTime := GetTickCount;
- Fib := FastFib(i);
- EndTime := GetTickCount;
- writeln(i:3, Fib:11);
- end;
- writeln('Time for last calculation: ', EndTime-StartTime);
- readln;
- end.
-